package cn.org.farseer.sweetftp.core.util;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.logging.Log;


/**
 * 作者 : [Farseer.org] 简洋  —  2009-8-17
 * 
 * 项目 : [Farseer.org] SweetFTP
 *
 * 说明：
 */
public class LoggerTools 
{
	/**
	 * log错误。会把堆栈信息log下来。
	 * @param logger
	 * @param e
	 */
	public static void logError(Log logger,Throwable e)
	{
		logger.error(e);
		StackTraceElement[] rootStackTraceElements= e.getStackTrace();
		for (int i = 0; i < rootStackTraceElements.length; i++) {
			StackTraceElement traceElement = rootStackTraceElements[i];
			logger.error("        at  "+ traceElement);   //模拟e.printStackTrace();
		}
		
		//打印Cause
		if(e.getCause() != null)
		{
			List allException = new ArrayList();
			processCause(allException, e.getCause());
			for (Iterator it = allException.iterator();it.hasNext();) {
				Throwable cause=	(Throwable)it.next();
				logger.error("Caused by: " + cause);
				StackTraceElement[] stackTraceElements= cause.getStackTrace();
				for (int i = 0; i < stackTraceElements.length; i++) {
					StackTraceElement traceElement = stackTraceElements[i];
					logger.error("        at  "+ traceElement);   //模拟e.printStackTrace();
				}
			}
		}
	}
	

	private static List processCause(List allException,Throwable e)
	{
		if(e == null)
			return allException;
		allException.add(e);
		if(e.getCause() != null)
			processCause(allException, e.getCause());
		return allException;
	}
	
	
	/**
	 * log调试信息.
	 * @param logger
	 * @param message
	 */
	public static void logDebug(Log logger,String message)
	{
		if(logger.isDebugEnabled())
			logger.debug(message);
	}
	
	/**
	 * log普通信息。
	 * @param logger
	 * @param message
	 */
	public static void logInfo(Log logger,String message)
	{
		if(logger.isInfoEnabled())
			logger.info(message);
	}

	/**
	 * log 错误信息。
	 * @param logger
	 * @param message
	 */
	public static void logError(Log logger,String message)
	{
		if(logger.isErrorEnabled())
			logger.error(message);
	}
}


